﻿using System;
using System.Collections.Generic;
using System.Drawing;
namespace GTAHookAdv.Overlay
{
    /// <summary>
    /// This interface is for internal use only (modders don't have to see/use it).
    /// It is here to break generic covariance issue with ControlOverlay{T} type.
    /// </summary>
    interface IControlInterfaceEmbend : IControlOverlay
    {
        System.Windows.Forms.Control CtrlEmbended { get; }
        void PerFrameDrawing(object sender, GTA.GraphicsEventArgs e);
        
    }
    /// <summary>
    /// This interface was made for test purpose, you should use it anyway.
    /// <seealso cref="ControlOverlay{T}"/>
    /// </summary>
    public interface IControlOverlay : IDisposable
    {
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Parent"]/*' />
        IControlOverlay Parent { get; set; }

        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="ParentChangedChanged"]/*' />
        event EventHandler ParentChanged;

        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Childs"]/*' />
        IControlOverlay[] Childs { get; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Method[@name="PointToScreen"]/*' />
        Point PointToScreen(Point p);

        /// <include file='ControlOverlay.doc' path='IControlOverlay/Method[@name="ChildAdd"]/*' />
        void ChildAdd(IControlOverlay child);
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Method[@name="ChildRemove"]/*' />
        void ChildRemove(IControlOverlay child);
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Method[@name="ChildRemoveAll"]/*' />
        void ChildRemoveAll();
        Color BorderColor { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Method[@name="BackColor"]/*' />
        System.Drawing.Color BackColor { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="BackColorChanged"]/*' />
        event EventHandler BackColorChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="BackColorTransparent"]/*' />
        System.Drawing.Color BackColorTransparent { get; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Blink"]/*' />
        bool Blink { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Disposing"]/*' />
        bool Disposing { get; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="ForeColor"]/*' />
        System.Drawing.Color ForeColor { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="ForeColorChanged"]/*' />
        event EventHandler ForeColorChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="ForeColorTransparent"]/*' />
        System.Drawing.Color ForeColorTransparent { get; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="IsDisposed"]/*' />
        bool IsDisposed { get; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Location"]/*' />
        System.Drawing.Point Location { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="LocationChanged"]/*' />
        event EventHandler LocationChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Opacity"]/*' />
        ushort Opacity { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="OpacityChanged"]/*' />
        event EventHandler OpacityChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="OpacityRange"]/*' />
        OpacityRangeMode OpacityRange { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="OpacityRangeChanged"]/*' />
        event EventHandler OpacityRangeChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="OwnerScript"]/*' />
        GTA.Script OwnerScript { get; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Size"]/*' />
        System.Drawing.Size Size { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="SizeChanged"]/*' />
        event EventHandler SizeChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="MinimumSize"]/*' />
        Size MinimumSize  {get;set;}
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="MaximumSize"]/*' />
        Size MaximumSize { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Text"]/*' />
        string Text { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Event[@name="TextChanged"]/*' />
        event EventHandler TextChanged;
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Visible"]/*' />
        bool Visible { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Height"]/*' />
        int Height { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Width"]/*' />
        int Width { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Top"]/*' />
        int Top { get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Bottom"]/*' />
        int Bottom{ get;}
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Left"]/*' />
        int Left{ get; set; }
        /// <include file='ControlOverlay.doc' path='IControlOverlay/Field[@name="Right"]/*' />
        int Right{ get;}
        
    }

    /// <include file='ProgressBarOverlay.doc' path='IProgressBarOverlay/Type[@name="IProgressBarOverlay"]/*' />
    public interface IProgressBarOverlay : IControlOverlay
    {
        
        /// <summary>
        /// this is a reuse of:
        /// <see cref="System.Windows.Forms.ProgressBar.Maximum"/>
        /// </summary>
        int Maximum { get; set; }
        /// <summary>
        /// this is a reuse of:
        /// <see cref="System.Windows.Forms.ProgressBar.Maximum"/>
        /// </summary>
        int Minimum { get; set; }
        /// <summary>
        /// this is a reuse of:
        /// <see cref="System.Windows.Forms.ProgressBar.Maximum"/>
        /// </summary>
        int Value { get; set; }
        /// <include file='ProgressBarOverlay.doc' path='IProgressBarOverlay/Field[@name="ValuePercent"]/*' />
        int ValuePercent { get; set; }
    }
}
